From: mjw@wray-m-3.hpl.hp.com Date: Fri, 24 Sep 2004 15:47:00 +0000 (+0000) Subject: bitkeeper revision 1.1159.1.174 (41544174lO23TSzrMCtW6FnECUFlnQ) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~17400^2~577 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=04e12a3139d2815a367b2b943562983eaec16d2c;p=xen.git bitkeeper revision 1.1159.1.174 (41544174lO23TSzrMCtW6FnECUFlnQ) Revert to constructing image first when creating a domain - doing it later breaks restore. --- diff --git a/tools/libxc/xc_io.h b/tools/libxc/xc_io.h index 00ed66dc24..4feca0b358 100644 --- a/tools/libxc/xc_io.h +++ b/tools/libxc/xc_io.h @@ -13,7 +13,8 @@ typedef struct XcIOContext { IOStream *err; char *vmconfig; int vmconfig_n; - int (*suspend)(u32 domain, void *data); + int (*suspend)(void *data, u32 domain); + int (*configure)(void *data, u32 domain, char *vmconfig, int vmconfig_n); void *data; } XcIOContext; @@ -21,7 +22,18 @@ static inline int xcio_suspend_domain(XcIOContext *ctxt){ int err = 0; if(ctxt->suspend){ - err = ctxt->suspend(ctxt->domain, ctxt->data); + err = ctxt->suspend(ctxt->data, ctxt->domain); + } else { + err = -EINVAL; + } + return err; +} + +static inline int xcio_configure_domain(XcIOContext *ctxt){ + int err = 0; + + if(ctxt->configure){ + err = ctxt->configure(ctxt->data, ctxt->domain, ctxt->vmconfig, ctxt->vmconfig_n); } else { err = -EINVAL; } diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 852f449011..647956f7be 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -500,16 +500,14 @@ class XendDomainInfo: raise VmError('missing memory size') self.init_domain() + self.construct_image() self.configure_console() self.configure_restart() self.configure_backends() deferred = self.configure() - def cbok(val): - return self.construct_image() def cberr(err): self.destroy() return err - deferred.addCallback(cbok) deferred.addErrback(cberr) except StandardError, ex: # Catch errors, cleanup and re-raise. @@ -651,12 +649,7 @@ class XendDomainInfo: devices have been released. """ if self.dom is None: return 0 - if self.console: - if self.restart_pending(): - self.console.deregisterChannel() - else: - log.debug('Closing console, domain %s', self.id) - self.console.close() + self.destroy_console() chan = xend.getDomChannel(self.dom) if chan: log.debug("Closing channel to domain %d", self.dom) @@ -666,6 +659,14 @@ class XendDomainInfo: except Exception, err: log.exception("Domain destroy failed: %s", self.name) + def destroy_console(self): + if self.console: + if self.restart_pending(): + self.console.deregisterChannel() + else: + log.debug('Closing console, domain %s', self.id) + self.console.close() + def cleanup(self): """Cleanup vm resources: release devices. """ diff --git a/tools/xfrd/xen_domain.c b/tools/xfrd/xen_domain.c index fe63e73a3d..fd7dd5f99e 100644 --- a/tools/xfrd/xen_domain.c +++ b/tools/xfrd/xen_domain.c @@ -16,11 +16,10 @@ typedef unsigned long u32; #define MODULE_NAME "XFRD" #define DEBUG 1 -#undef DEBUG +//#undef DEBUG #include "debug.h" - -int domain_suspend(u32 dom, void *data){ +int domain_suspend(void *data, u32 dom){ int err = 0; Conn *xend = data; @@ -30,6 +29,10 @@ int domain_suspend(u32 dom, void *data){ return err; } +int domain_configure(void *data, u32 dom, char *vmconfig, int vmconfig_n){ + return xen_domain_configure(dom, vmconfig, vmconfig_n); +} + #ifndef _XEN_XFR_STUB_ static int xc_handle = 0; @@ -131,6 +134,7 @@ int xen_domain_rcv(IOStream *io, uint32_t *dom, char **vmconfig, int *vmconfig_n ioctxt->io = io; ioctxt->info = iostdout; ioctxt->err = iostderr; + ioctxt->configure = domain_configure; err = xc_linux_restore(xcinit(), ioctxt); *dom = ioctxt->domain; diff --git a/tools/xfrd/xfrd.c b/tools/xfrd/xfrd.c index f84e29e6a2..93062ca8fb 100644 --- a/tools/xfrd/xfrd.c +++ b/tools/xfrd/xfrd.c @@ -49,8 +49,8 @@ #include "select.h" #define MODULE_NAME "XFRD" -#define DEBUG 0 -#undef DEBUG +#define DEBUG 1 +//#undef DEBUG #include "debug.h" /* @@ -796,7 +796,6 @@ int xfr_recv(Args *args, XfrState *state, Conn *peer){ // before we configure the new one. err = Conn_sxpr(peer, &sxpr); if(err) goto exit; - //sleep(2); err = xen_domain_configure(state->vmid_new, state->vmconfig, state->vmconfig_n); if(err) goto exit; err = xen_domain_unpause(state->vmid_new); @@ -916,7 +915,7 @@ int xfrd_accept(Args *args, int sock){ pid_t pid; int err = 0; - dprintf(">\n"); + dprintf("> sock=%d\n", sock); dprintf("> accept...\n"); peersock = accept(sock, peer, &peer_n); dprintf("> accept=%d\n", peersock); @@ -925,8 +924,8 @@ int xfrd_accept(Args *args, int sock){ err = -errno; goto exit; } - iprintf("> Accepted connection from %s:%d\n", - inet_ntoa(peer_in.sin_addr), htons(peer_in.sin_port)); + iprintf("> Accepted connection from %s:%d on %d\n", + inet_ntoa(peer_in.sin_addr), htons(peer_in.sin_port), sock); pid = fork(); if(pid > 0){ // Parent, fork succeeded.